//
//  StatusListViewModel.swift
//  SinaWeiBo
//
//  Created by Leon 笑 竹 on 2017/8/7.
//  Copyright © 2017年 Leon 笑 竹. All rights reserved.
//

import Foundation

//如果需要使用kvc方法或者字典转模型框架就继承nsobject
//如果只是包含了一些逻辑代码就不需要任何的父类，这样会更加轻量级

//负责微博的数据处理
//上下拉刷新逻辑,字典转模型

//设置最大刷新次数
fileprivate let maxPullupTryTimes = 3

class StatusListViewModel {
    
    //上拉刷新错误数，如果错误一次累加1
    fileprivate var pullupErrorTimes = 0
    
    lazy var statusList = [StatusModel]()

    /// 加载微博列表
    ///
    ///   - isPullup: 是否上拉刷新
    /// - Parameter completion: 完成回调[网络请求是否成功
    func loadStatus(isPullup : Bool, completion : @escaping (_ isSuccess : Bool, _ isMorePullup : Bool) -> ()) {
        
        //如果错误次数大于最高次数，则刷新失败
        if isPullup && pullupErrorTimes > maxPullupTryTimes {
            completion(false,false)
            return
        }
        
        //下拉刷新id(如果下拉刷新标记不为真下拉刷新就是0)
        let since_id = isPullup ? 0 : (statusList.first?.id ?? 0)
        //上拉刷新(取出最后一条的id)
        let max_id = !isPullup ? 0 : (statusList.last?.id ?? 0)
        
        
        NetworkManager.shared.statusList(since_id: since_id,max_id: max_id) { (list, isSuccess) in
            //字典转模型
            guard let array = NSArray.yy_modelArray(with: StatusModel.self, json: list ?? []) as? [StatusModel] else{
                
                completion(isSuccess,false)
                return
            }
         
            //刷新了几条数据
            print("刷新了 \(array.count) 数据")
            
            //如果是上拉刷新就把数据放在末尾
            if isPullup {
                self.statusList += array
            }
            
            //拼接数据 把新的放在旧的前面，下拉刷新
           self.statusList = array + self.statusList
            
            //错误数量
            if isPullup && array.count == 0 {
                self.pullupErrorTimes += 1
                //回调
                completion(isSuccess, false)
                
            }else{
                
                //完成回调
                completion(isSuccess,true)
            }
        }
    }
    
}
